package com.xh.common.thread.ext.queue;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;

/**
 * 支持根据等级获取不同的数据的自定义队列接口
 */
public interface LevelBlockingQueue<E> extends BlockingQueue<E> {

    E take(int level) throws InterruptedException;

    E poll(int level);

    E poll(int level, long timeout, TimeUnit unit) throws InterruptedException;

    E peek(int level);

    /**
     * 将任务放到等待队列，这个队列比正常的队列优先级高，只有在有线程空闲的时候才能添加成功
     * @param e
     * @param level
     * @return
     */
    boolean offerWait(E e, int level);
}
